package com.yugao.fintech.antelope.pay.client.model.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.yugao.fintech.antelope.base.model.BasePO;
import lombok.*;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 产品退款订单

 */
@Getter
@Setter
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ToString
@TableName("goods_refund")
public class GoodsRefund extends BasePO {
    public static LambdaQueryWrapper<GoodsRefund> lqw() {
        return Wrappers.lambdaQuery();
    }

    public static LambdaUpdateWrapper<GoodsRefund> luw() {
        return Wrappers.lambdaUpdate();
    }

    /**
     * 退款订单号（支付系统生成订单号）
     */
    @TableId(value = "id")
    private String id;

    /**
     * 商品id
     */
    private Long goodsId;

    /**
     * 商户订单号
     */
    private String mchOrderNo;

    /**
     * 商户退款单号（商户系统的订单号）
     */
    private String mchRefundNo;

    /**
     * 支付方式代码
     */
    private String wayCode;

    /**
     * 支付金额,单位元
     */
    private BigDecimal payAmount;

    /**
     * 退款金额,单位元
     */
    private BigDecimal refundAmount;

    /**
     * 三位货币代码,人民币:cny
     */
    private String currency;

    /**
     * 退款状态:
     * 0-订单生成,1-退款中,2-退款成功,3-退款失败,4-退款任务关闭
     */
    private String status;

    /**
     * 客户端IP
     */
    private String clientIp;

    /**
     * 退款原因
     */
    private String refundReason;

    /**
     * 订单退款成功时间
     */
    private Date successTime;

    /**
     * 退款失效时间（失效后系统更改为退款任务关闭状态）
     */
    private Date expiredTime;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createdAt;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.UPDATE)
    private Date updatedAt;
}
